description = "Spring TestContext Framework"

apply plugin: "kotlin"

dependencies {
	api(project(":spring-core"))
	optional(project(":spring-aop"))
	optional(project(":spring-beans"))
	optional(project(":spring-context"))
	optional(project(":spring-jdbc"))
	optional(project(":spring-orm"))
	optional(project(":spring-tx"))
	optional(project(":spring-web"))
	optional(project(":spring-webflux"))
	optional(project(":spring-webmvc"))
	optional(project(":spring-websocket"))
	optional("com.jayway.jsonpath:json-path")
	optional("io.micrometer:context-propagation")
	optional("io.micrometer:micrometer-observation")
	optional("io.projectreactor:reactor-test")
	optional("jakarta.activation:jakarta.activation-api")
	optional("jakarta.el:jakarta.el-api")
	optional("jakarta.inject:jakarta.inject-api")
	optional("jakarta.servlet:jakarta.servlet-api")
	optional("jakarta.servlet.jsp:jakarta.servlet.jsp-api")
	optional("jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api")
	optional("jakarta.websocket:jakarta.websocket-api")
	optional("jakarta.websocket:jakarta.websocket-client-api")
	optional("jakarta.xml.bind:jakarta.xml.bind-api")
	optional("javax.inject:javax.inject")
	optional("junit:junit")
	optional("org.apache.groovy:groovy")
	optional("org.apache.tomcat.embed:tomcat-embed-core")
	optional("org.aspectj:aspectjweaver")
	optional("org.assertj:assertj-core")
	optional("org.hamcrest:hamcrest")
	optional("org.htmlunit:htmlunit") {
		exclude group: "commons-logging", module: "commons-logging"
	}
	optional("org.jetbrains.kotlin:kotlin-reflect")
	optional("org.jetbrains.kotlin:kotlin-stdlib")
	optional("org.jetbrains.kotlinx:kotlinx-coroutines-core")
	optional("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
	optional("org.junit.jupiter:junit-jupiter-api")
	optional("org.junit.platform:junit-platform-launcher")  // for AOT processing
	optional("org.mockito:mockito-core")
	optional("org.seleniumhq.selenium:htmlunit3-driver") {
		exclude group: "commons-logging", module: "commons-logging"
		exclude group: "net.bytebuddy", module: "byte-buddy"
	}
	optional("org.seleniumhq.selenium:selenium-java") {
		exclude group: "net.bytebuddy", module: "byte-buddy"
	}
	optional("org.skyscreamer:jsonassert")
	optional("org.testng:testng")
	optional("org.xmlunit:xmlunit-matchers")
	testImplementation(project(":spring-context-support"))
	testImplementation(project(":spring-core-test"))
	testImplementation(project(":spring-oxm"))
	testImplementation(testFixtures(project(":spring-beans")))
	testImplementation(testFixtures(project(":spring-context")))
	testImplementation(testFixtures(project(":spring-core")))
	testImplementation(testFixtures(project(":spring-tx")))
	testImplementation(testFixtures(project(":spring-web")))
	testImplementation("com.fasterxml.jackson.core:jackson-databind")
	testImplementation("com.rometools:rome")
	testImplementation("com.thoughtworks.xstream:xstream")
	testImplementation("de.bechte.junit:junit-hierarchicalcontextrunner")
	testImplementation("io.projectreactor.netty:reactor-netty-http")
	testImplementation("jakarta.annotation:jakarta.annotation-api")
	testImplementation("jakarta.ejb:jakarta.ejb-api")
	testImplementation("jakarta.interceptor:jakarta.interceptor-api")
	testImplementation("jakarta.mail:jakarta.mail-api")
	testImplementation("jakarta.validation:jakarta.validation-api")
	testImplementation("javax.cache:cache-api")
	testImplementation("org.apache.httpcomponents:httpclient") {
		exclude group: "commons-logging", module: "commons-logging"
	}
	testImplementation("org.awaitility:awaitility")
	testImplementation("org.hibernate:hibernate-core-jakarta")
	testImplementation("org.hibernate:hibernate-validator")
	testImplementation("org.hsqldb:hsqldb")
	testImplementation("org.junit.platform:junit-platform-testkit")
	testRuntimeOnly("com.sun.xml.bind:jaxb-core")
	testRuntimeOnly("com.sun.xml.bind:jaxb-impl")
	testRuntimeOnly("org.glassfish:jakarta.el")
	testRuntimeOnly("org.junit.support:testng-engine")
	testRuntimeOnly("org.junit.vintage:junit-vintage-engine") {
		exclude group: "junit", module: "junit"
	}
	testRuntimeOnly("org.yaml:snakeyaml")
}

// Prevent xml-apis from being used so that the corresponding XML APIs from
// the JDK's `java.xml` module are used instead. This allows spring-test to
// build in Eclipse IDE which fails to compile if there is a split package
// between a JDK system module and the unnamed module (for JARs on the
// classpath).
configurations.optional {
	exclude group: "xml-apis", module: "xml-apis"
}

test {
	description = "Runs JUnit 4, JUnit Jupiter, and TestNG tests."
	useJUnitPlatform {
		includeEngines "junit-vintage", "junit-jupiter", "testng"
		excludeTags "failing-test-case"
	}
	// We use `include` instead of `filter.includeTestsMatching`, since
	// the latter results in some tests being executed/reported
	// multiple times.
	include(["**/*Tests.class", "**/*Test.class"])
	filter.excludeTestsMatching("*TestCase")
	systemProperty("testGroups", project.properties.get("testGroups"))
	// Java Util Logging for the JUnit Platform.
	// systemProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager")
}
